import minimist from 'minimist'
import { resolve, dirname } from 'path'
import { fileURLToPath } from 'url'
import { createRequire } from 'module'
import esbuild from 'esbuild'

const require = createRequire(import.meta.url)
// node中esm没有__dirname
const __filename = fileURLToPath(import.meta.url) // 获取文件的绝对路径 file -> /usr  拿到的是文件
const __dirname = dirname(__filename) // 获取到路径

// 解析参数 process.argv 第一个参数是执行命令名称 第二个是执行的文件 再然后是参数 { _: [ 'reactivity' ], f: 'esm' }
const args = minimist(process.argv.slice(2))
const target = args._[0] || 'reactivity' // 获取执行的文件,可能有多个 所以只取第一个
const format = args.f || 'iife' // 编译模式,默认iife

const entry = resolve(__dirname, `../packages/${target}/src/index.ts`) // 入口文件
const pkg = require(resolve(__dirname, `../packages/${target}/package.json`))

/**
 * esbuild 编译
 */
esbuild.context({
  entryPoints: [entry],
  outfile: resolve(__dirname, `../packages/${target}/dist/${target}.js`),
  bundle: true, // 将所有依赖打包成一个文件
  platform: 'browser',// 编译环境 bundle 使用则需要
  sourcemap: true,
  format: format, // 编译为cjs esm iife
  globalName: pkg.buildOptions.name, // iife模式下的全局变量名
}).then((ctx) => {
  ctx.watch() // 监听文件变化
  console.log(`Build ${target} success!`)
})